﻿using NAudio.Wave;
using 交互音乐播放器.中间件;
using 交互音乐播放器.数据;

namespace 交互音乐播放器.音频逻辑
{
    public interface 音频控制器接口
    {
        public static 音乐播放数据 数据;
        public static 脚本文件数据 脚本;
        public static 音频控制器接口? 当前控制器;
        public Dictionary<string, WaveStream> 已载文件组 { get; set; }

        void 使用效果(byte[] 音频缓冲区, int 偏移值, int 读取大小, string 流别名);
        int 内部_取得播放数据(byte[] 音频缓冲区, int 偏移值, int 读取大小, string 流别名);
        (bool 是否继续处理, int 已处理字节) 内部_处理CUE点逻辑(byte[] 音频缓冲区, int 偏移值, int 读取大小, string 流别名);
        void 内部_更新播放状态(int 剩余读取字节量, string 流别名);
        bool 命令_停止(string 播放流别名);
        bool 命令_停止所有();
        bool 命令_全部重定位(double 位置百分比);
        bool 命令_加载文件(string 文件路径, string 文件别名);
        bool 命令_播放音乐(string 播放流名称, string 文件别名);
        int 命令_新建播放流(string 流别名, int 流编号);
        bool 命令_暂停(string 播放流别名);
        bool 命令_暂停所有();
        bool 命令_更换文件(string 文件别名, string 流别名, int 起始偏移);
        void 命令_添加文件属性信息(string 文件别名, string 文件路径);
        void 命令_添加文件节拍信息(string 文件别名, float BPM, long 文件大小, TimeSpan 播放总时长);
        bool 命令_继续所有();
        bool 命令_重定位(long 字节位置, string 文件别名);
        bool 已载文件组加入文件(string 文件别名, string 文件路径, WaveStream 文件流, IWaveProvider 读取器);
        void 本段落读取完毕(string 流别名);
    }
}